home *** CD-ROM | disk | FTP | other *** search
- /* ><PrologX$Dir>.Trace */
-
-
- /* trace(Goal) if Goal is deducible from the Prolog program
- defined by clause/2. The program traces
- the prooof by side effects.
-
- Modified from Sterling & Shapiro: 'The Art of Prolog'
- page 310, program 19.5
-
- NOTES:
- ======
- (1) Works OK for everything except cuts (!).
- (2) The rest of the built-in predicates need to be entered.
-
- */
-
-
-
- /* built_in(X) if X is a built-in predicate.
- (Sterling & Shapiro use system(X), but this is
- used by Archimedes Prolog for OS calls.
- */
-
-
- built_in((P:-Q)).
- built_in((P-->Q)).
- built_in(('!')).
- built_in((P->Q;R)).
- built_in((P->Q)).
- built_in(:-(P)).
- built_in(?-(P)).
- built_in((P;Q)).
- built_in((P,Q)).
- built_in(not(P)).
- built_in(\+(P)).
- built_in((X=Y)).
-
- built_in((X is Y)).
- built_in((T=..L)).
- built_in((X==Y)).
- built_in((X\==Y)).
- built_in((X\=Y)).
- built_in((X@<Y)).
- built_in((X@>Y)).
- built_in((X@=<Y)).
- built_in((X@>=Y)).
- built_in((X=:=Y)).
- built_in((X<Y)).
- built_in((X>Y)).
- built_in((X=<Y)).
- built_in((X>=Y)).
- built_in((X=\=Y)).
- built_in((X+Y)).
- built_in((X-Y)).
- built_in((X/\Y)).
- built_in((X\/Y)).
- built_in(+(X)).
- built_in(-(X)).
- built_in((X*Y)).
- built_in((X/Y)).
- built_in((X<<Y)).
- built_in((X>>Y)).
- built_in((X mod Y)).
- built_in((X^Y)).
-
- built_in(abolish(F,N)).
- built_in(abort).
- built_in(arg(N,T,A)).
- built_in(assert(C)).
- built_in(asserta(C)).
- built_in(assertz(C)).
- built_in(atom(T)).
- built_in(atomic(T)).
- built_in(bagof(X,P,B)).
- built_in(break_handler).
- built_in(call(P)).
- built_in(clause(P,Q)).
- built_in(clause(P,Q,R)).
- built_in(compare(C,X,Y)).
- built_in(compile(F)).
- built_in(consult(F)).
- built_in(display(T)).
- built_in(endmodule(A)).
- built_in(erase(R)).
- built_in(error_handler(N,T)).
- built_in(fail).
- built_in(findall(T,G,L)).
- built_in(findall(T,G,S,L)).
- built_in(forall(P,Q)).
- built_in(functor(T,F,N)).
- built_in(get(C)).
- built_in(get0(C)).
- built_in(halt).
- built_in(import(P,M)).
- built_in(integer(T)).
- built_in(keysort(L,S)).
- built_in(length(L,M)).
- built_in(listing(F,A)).
- built_in(name(A,L)).
- built_in(nl).
- built_in(nonvar(T)).
- built_in(numbervars(T,M,N)).
- built_in(op(P,T,A)).
- built_in(put(C)).
- built_in(read(T)).
- built_in(read(T,L)).
- built_in(recorda(K,T,R)).
- built_in(recorded(K,T,R)).
- built_in(recordz(K,T,R)).
- built_in(repeat).
- built_in(retract(T)).
- built_in(save(F)).
- built_in(see(F)).
- built_in(seeing(F)).
- built_in(seen).
- built_in(setof(X,P,S)).
- built_in(simpleterm(T)).
- built_in(skip(C)).
- built_in(sort(L,S)).
- built_in(statistics(X,Y)).
- built_in(succ(M,N)).
- built_in(system(L)).
- built_in(tab(N)).
- built_in(tell(F)).
- built_in(telling(F)).
- built_in(told).
- built_in(true).
- built_in(ttyflush).
- built_in(unknown(O,N)).
- built_in(var(T)).
- built_in(visa(A,F)).
- built_in(write(T)).
- built_in(writedepth(O,N)).
- built_in(writeq(T)).
- built_in(writewidth(O,N)).
-
-
-
- /******************************************************/
-
-
- trace(Goal) :-
- trace(Goal, 0).
-
- trace(true, Depth) :-
- !.
-
- trace((A,B), Depth) :-
- !, trace(A, Depth),
- trace(B, Depth).
-
- trace(A, Depth) :-
- built_in(A),
- A,
- trace_display(A,Depth),nl.
-
- trace(A, Depth) :-
- clause(A, B),
- trace_display(A, Depth), nl,
- Depth1 is Depth+1,
- trace(B, Depth1).
-
- trace(A, Depth) :-
- \+ clause(A, B),
- trace_display(A, Depth),
- tab(8), write('fail'),nl,
- fail.
-
- trace_display(A, Depth) :-
- Spacing is 2*Depth,
- tab(Spacing),
- write(A).
-
-